﻿using System;
using System.Net;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Documents;
using System.Windows.Ink;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Animation;
using System.Windows.Shapes;
//using Microsoft.VisualStudio.TestTools.UnitTesting;
//using Microsoft.Silverlight.Testing;
using OpenFrameworkCore.Controls;
using System.Collections.ObjectModel;
using OpenFrameworkCore.Serialize;

namespace OpenFrameworkTest
{
    //[TestClass]
    //public class ControlContainerTest : SilverlightTest
    //{
    //    /*private Page _testPage;

    //    [TestInitialize]
    //    public void Initialize()
    //    {
    //        _testPage = new Page();

    //        this.TestPanel.Children.Add(_testPage);
    //    }

    //    [TestCleanup]
    //    public void CleanUp()
    //    {
    //        this.TestPanel.Children.Remove(_testPage);
    //    }

    //    [TestMethod]
    //    public void ControlContextSourceNullTest()
    //    {
    //        Assert.IsNull(_testPage.controlContainer.ControlContextsSource);
    //        Assert.AreEqual(_testPage.controlContainer.ControlContexts.Count, 0);
    //    }

    //    [TestMethod]
    //    public void ControlContextSourceSetTest()
    //    {
    //        // 아무것도 없는 ContextList 설정
    //        ObservableCollection<BasicControlContext> controlBaseContexts =
    //            new ObservableCollection<BasicControlContext>();

    //        _testPage.controlContainer.ControlContextsSource = controlBaseContexts;

    //        Assert.IsNotNull(_testPage.controlContainer.ControlContextsSource, null);
    //        Assert.AreEqual(_testPage.controlContainer.ControlContexts.Count, 0);

    //        // 새로운 ContextList를 설정한다.
    //        ObservableCollection<BasicControlContext> controlBaseContexts2 =
    //            new ObservableCollection<BasicControlContext>();

    //        _testPage.controlContainer.ControlContextsSource = controlBaseContexts2;

    //        controlBaseContexts2.Add(
    //            new BasicControlContext()
    //            {
    //                ControlClass = new SimpleControl().GetType().AssemblyQualifiedName
    //            }
    //        );

    //        Assert.AreEqual(_testPage.controlContainer.ControlContexts.Count, 1);

    //        // ControlContextsSource에 Null을 줬을때 Count가 0이 나오는지 확인한다.
    //        _testPage.controlContainer.ControlContextsSource = null;

    //        Assert.IsNull(_testPage.controlContainer.ControlContextsSource);
    //        Assert.AreEqual(_testPage.controlContainer.ControlContexts.Count, 0);
    //    }

    //    [TestMethod]
    //    public void ControlBindingTest()
    //    {
    //        ObservableCollection<BasicControlContext> controlBaseContexts =
    //            new ObservableCollection<BasicControlContext>();

    //        BasicControlContext controlContext = new BasicControlContext()
    //            {
    //                ControlClass = new SimpleControl().GetType().AssemblyQualifiedName,
    //                Width = 200,
    //                Height = 200,
    //                X = 100,
    //                Y = 100,
    //                Angle = 20,
    //                ZIndex = 10,
    //                Opacity = 0.5
    //            };

    //        controlBaseContexts.Add(controlContext);

    //        _testPage.controlContainer.ControlContextsSource = controlBaseContexts;

    //        // 개수 체크
    //        Assert.AreEqual(_testPage.controlContainer.Controls.Count, 1);

    //        // Class 체크
    //        Assert.AreEqual(_testPage.controlContainer.Controls[0].GetType().AssemblyQualifiedName, controlContext.ControlClass);

    //        // 넓이 체크
    //        Assert.AreEqual(_testPage.controlContainer.Controls[0].Width, controlContext.Width);

    //        // 높이 체크
    //        Assert.AreEqual(_testPage.controlContainer.Controls[0].Width, controlContext.Height);

    //        // X 체크
    //        Assert.AreEqual(_testPage.controlContainer.Controls[0].X, controlContext.X);

    //        // Y 체크
    //        Assert.AreEqual(_testPage.controlContainer.Controls[0].Y, controlContext.Y);

    //        // Angle 체크
    //        Assert.AreEqual(_testPage.controlContainer.Controls[0].Angle, controlContext.Angle);

    //        // ZIndex 체크
    //        Assert.AreEqual(_testPage.controlContainer.Controls[0].ZIndex, controlContext.ZIndex);

    //        // Opacity 체크
    //        Assert.AreEqual(_testPage.controlContainer.Controls[0].Opacity, controlContext.Opacity);
    //    }

    //    [TestMethod]
    //    public void ControlContextAddRemoveTest()
    //    {
    //        ObservableCollection<BasicControlContext> controlBaseContexts =
    //            new ObservableCollection<BasicControlContext>();

    //        controlBaseContexts.Add(
    //            new BasicControlContext() 
    //            { 
    //                ControlClass = new SimpleControl().GetType().AssemblyQualifiedName 
    //            } 
    //        );

    //        _testPage.controlContainer.ControlContextsSource = controlBaseContexts;

    //        // 1개 추가한 상황
    //        // 즉, Count는 1이 나와야한다.
    //        Assert.AreEqual(_testPage.controlContainer.ControlContexts.Count, 1);

    //        controlBaseContexts.Add(
    //            new BasicControlContext()
    //            {
    //                ControlClass = new SimpleControl().GetType().AssemblyQualifiedName
    //            }
    //        );

    //        // 1개 더 추가한 상황
    //        // 즉, Count는 2가 나와야한다.
    //        Assert.AreEqual(_testPage.controlContainer.ControlContexts.Count, 2);

    //        controlBaseContexts.Insert
    //            (
    //                1,
    //                new BasicControlContext()
    //                {
    //                    ControlClass = new SimpleControl().GetType().AssemblyQualifiedName
    //                }
    //            );

    //        // 1개 더 추가한 상황
    //        // 즉, Count는 3이 나와야한다.
    //        Assert.AreEqual(_testPage.controlContainer.ControlContexts.Count, 3);

    //        // 1개 삭제
    //        controlBaseContexts.RemoveAt(0);

    //        // 1개 삭제
    //        // 즉, Count는 2가 나와야한다.
    //        Assert.AreEqual(_testPage.controlContainer.ControlContexts.Count, 2);

    //        // 모두 삭제
    //        controlBaseContexts.Clear();

    //        // Count는 0이 나와야한다.
    //        Assert.AreEqual(_testPage.controlContainer.ControlContexts.Count, 0);
    //    }

    //    [TestMethod]
    //    public void LoadUnLoadTest()
    //    {
    //        ObservableCollection<BasicControlContext> controlBaseContexts =
    //            new ObservableCollection<BasicControlContext>();

    //        _testPage.controlContainer.ControlContextsSource = controlBaseContexts;

    //        controlBaseContexts.Add(
    //            new BasicControlContext()
    //            {
    //                ControlClass = new SimpleControl().GetType().AssemblyQualifiedName
    //            }
    //        );

    //        controlBaseContexts.Add(
    //            new BasicControlContext()
    //            {
    //                ControlClass = new SimpleControl().GetType().AssemblyQualifiedName
    //            }
    //        );

    //        // 2개의 컨트롤이 존재해야 한다.
    //        Assert.AreEqual(_testPage.controlContainer.Controls.Count, 2);

    //        // 페이지를 화면에서 제거한다.
    //        _testPage.LayoutRoot.Children.Remove(_testPage.controlContainer);

    //        // 페이지를 다시 추가한다.
    //        _testPage.LayoutRoot.Children.Add(_testPage.controlContainer);

    //        // 2개의 컨트롤이 존재해야 한다.
    //        Assert.AreEqual(_testPage.controlContainer.Controls.Count, 2);
    //    }

    //    [TestMethod]
    //    public void BindingTest()
    //    {
    //        // BasicControlContainerContext 생성
    //        BasicControlContainerContext controlContainerContext = new BasicControlContainerContext();
    //        controlContainerContext.Width = 700;
    //        controlContainerContext.Height = 300;

    //        ObservableCollection<BasicControlContext> controlBaseContexts =
    //            new ObservableCollection<BasicControlContext>();

    //        controlContainerContext.ControlContexts = controlBaseContexts;

    //        controlBaseContexts.Add(
    //            new BasicControlContext()
    //            {
    //                ControlClass = new SimpleControl().GetType().AssemblyQualifiedName
    //            }
    //        );

    //        _testPage.controlContainer.BasicControlContainerContext = controlContainerContext;

    //        Assert.AreEqual(_testPage.controlContainer.Width, controlContainerContext.Width);
    //        Assert.AreEqual(_testPage.controlContainer.Height, controlContainerContext.Height);
    //        Assert.AreEqual(_testPage.controlContainer.Controls.Count, 1);

    //        controlBaseContexts.Add(
    //            new BasicControlContext()
    //            {
    //                ControlClass = new SimpleControl().GetType().AssemblyQualifiedName
    //            }
    //        );

    //        Assert.AreEqual(_testPage.controlContainer.Controls.Count, 2);

    //        controlBaseContexts.Clear();

    //        Assert.AreEqual(_testPage.controlContainer.Controls.Count, 0);
    //    }

    //    [TestMethod]
    //    public void ControlModeTest()
    //    {
    //        // BasicControlContainerContext 생성
    //        BasicControlContainerContext controlContainerContext = new BasicControlContainerContext();
    //        controlContainerContext.Width = 700;
    //        controlContainerContext.Height = 300;

    //        ObservableCollection<BasicControlContext> controlBaseContexts =
    //            new ObservableCollection<BasicControlContext>();

    //        controlContainerContext.ControlContexts = controlBaseContexts;

    //        controlBaseContexts.Add(
    //            new BasicControlContext()
    //            {
    //                ControlClass = new SimpleControl().GetType().AssemblyQualifiedName
    //            }
    //        );

    //        _testPage.controlContainer.BasicControlContainerContext = controlContainerContext;
    //    }

    //    [TestMethod]
    //    public void SerializeTest()
    //    {

    //        // BasicControlContainerContext 생성
    //        BasicControlContainerContext controlContainerContext = new BasicControlContainerContext();
    //        controlContainerContext.Width = 700;
    //        controlContainerContext.Height = 300;

    //        ObservableCollection<BasicControlContext> controlBaseContexts =
    //            new ObservableCollection<BasicControlContext>();

    //        controlContainerContext.ControlContexts = controlBaseContexts;

    //        controlBaseContexts.Add(
    //            new BasicControlContext()
    //            {
    //                ControlClass = new SimpleControl().GetType().AssemblyQualifiedName
    //            }
    //        );

    //        try
    //        {
    //            Serializer serializer = new Serializer();
    //            string serializedData = serializer.Serialize(controlContainerContext);

    //            if (serializedData == null)
    //                Assert.Fail("Serialize Fail");

    //            BasicControlContainerContext serializedContext = 
    //                (BasicControlContainerContext)serializer.Deserialize(typeof(BasicControlContainerContext), serializedData);

    //            if (serializedContext == null)
    //                Assert.Fail("Deserialize Fail");
    //        }
    //        catch (SerializeException ex)
    //        {
    //            Assert.Fail(ex.Message);
    //        }
    //    }*/
    //}
}
